package spider2

/**
包管理
1.go get -v -u github.com/gpmgo/gopm 安装gopm 工具，对包下载加速
2.gopm get -g -v golang.org/x/text  安装golang.org/x/text这个包 - 包含字符编码转换的功能
3.gopm get -g -v golang.org/x/net/html 安装golang.org/x/net/html包 - 包含字符编码判断的功能
*/

import (
	"bufio"
	"golang.org/x/net/html/charset"
	"golang.org/x/text/encoding"
	"golang.org/x/text/transform"
	"io"
	"io/ioutil"
)

type UTF8Reader struct {
	R io.ReadCloser
}

func (mr *UTF8Reader) Read(p []byte) (n int, err error) {
	return mr.R.Read(p)
}

func (mr *UTF8Reader) Close() error {
	return mr.R.Close()
}

/**
  读取reader中的字符，并且根据内容的编码自动转为utf-8
*/
func (mr *UTF8Reader) TransReader() (bytes []byte) {

	tmpReader := bufio.NewReader(mr)

	newReader := transform.NewReader(tmpReader, mr.determineEncoding(tmpReader).NewDecoder())

	bytes, err := ioutil.ReadAll(newReader)
	if nil != err {
		panic(err)
	}
	return
}

/**
确定reader中的内容的编码形式，例如GBK，UTF-8
*/
func (mr *UTF8Reader) determineEncoding(reader *bufio.Reader) (encoding encoding.Encoding) {

	bytes, e := reader.Peek(1024)
	if nil != e {
		panic(e)
	}
	encoding, _, _ = charset.DetermineEncoding(bytes, "")
	return
}
